/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.struts;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;

/**
 *
 * @author Rodriguez
 */
public class ManejadorArchivoTareas {

    public void escribirArchivo(String ruta, String atributoTarea) {
        try {
            File archivo = new File(ruta);
            //Si no Existe el archivo lo crea  
            if (!archivo.exists()) {
                archivo.createNewFile();
            }
            BufferedWriter flujoEscritura = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(archivo, true), "ISO-8859-1"));
            flujoEscritura.write(atributoTarea + "\r\n");
            flujoEscritura.write("\r\n"); //salto de linea para separa atributos
            //Cierra el flujo de escritura  
            flujoEscritura.close();
        } catch (Exception ex) {
            //Captura un posible error le imprime en pantalla   
            System.out.println(ex.getMessage());
        }
    }

    public void escribirTarea(String ruta, Tarea tarea) {
        File f;
        FileWriter w;
        BufferedWriter bw;
        PrintWriter wr;
        int id = tarea.getId();
        String descripcion = tarea.getDescripcion();
        String dia = tarea.getDia();
        String mes = tarea.getMes();
        String año = tarea.getAño();
        String hora = tarea.getHora();
        String porcentaje = tarea.getPorcentaje();
        String visibilidad = tarea.getVisibilidad();
        try {
            f = new File(ruta);
            if (!f.exists()) {
                f.createNewFile();
            }
            w = new FileWriter(f, true);
            bw = new BufferedWriter(w);
            wr = new PrintWriter(bw);

            wr.write(id + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(descripcion + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(dia + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(mes + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(año + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(hora + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(porcentaje + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos
            wr.write(visibilidad + "\r\n");
            wr.write("\r\n"); //salto de linea para separa atributos       
            wr.close();
            bw.close();
            w.close();
        } catch (Exception ex) {
            //Captura un posible error le imprime en pantalla   
            System.out.println(ex.getMessage());
        }
    }

    public int buscarUltimoId(File archivo) {
        int id = 0;
        try {
            /*Si existe el fichero*/
            if (archivo.exists()) {
                BufferedReader flujoLectura = new BufferedReader(new FileReader(archivo));
                String linea;
                //  System.out.println("**********Leyendo Fichero***********");  
           /*Lee el fichero linea a linea hasta llegar a la ultima*/
                while ((linea = flujoLectura.readLine()) != null) {
                    /*Imprime la linea leida*/
                    id = Integer.parseInt(linea);
                    flujoLectura.readLine();//espacio entre id y desc
                    flujoLectura.readLine();//desc
                    flujoLectura.readLine();// desc dia
                    flujoLectura.readLine();//dia
                    flujoLectura.readLine();//dia mes
                    flujoLectura.readLine();//mes
                    flujoLectura.readLine();//mes año
                    flujoLectura.readLine();//año
                    flujoLectura.readLine();//año hora
                    flujoLectura.readLine();//hora
                    flujoLectura.readLine();//hora porcentaje
                    flujoLectura.readLine();//porcentaje
                    flujoLectura.readLine();//porc vis
                    flujoLectura.readLine();//vis
                    flujoLectura.readLine();//ultima
                }
                /*Cierra el flujo*/
                flujoLectura.close();
            } else {
                System.out.println("Archivo No Existe");
            }
        } catch (Exception ex) {
            /*Captura un posible error y le imprime en pantalla*/
            System.out.println(ex.getMessage());
        }
        return id;
    }

    public ArrayList leerTareas() {
        File archivo = new File("C://Tareas_Data.txt");
        ArrayList tareas = new ArrayList();
        try {
            if (archivo.exists()) {
                BufferedReader flujoLectura = new BufferedReader(new FileReader(archivo));
                String linea;
                /*Lee el archivo linea a linea hasta llegar a la ultima*/
                while ((linea = flujoLectura.readLine()) != null) {
                    int id = Integer.parseInt(linea);
                    flujoLectura.readLine();//espacio entre id y desc
                    String descripcion = flujoLectura.readLine();//desc
                    flujoLectura.readLine();// desc dia
                    String dia = flujoLectura.readLine();//dia
                    flujoLectura.readLine();//dia mes
                    String mes = flujoLectura.readLine();//mes
                    flujoLectura.readLine();//mes año
                    String año = flujoLectura.readLine();//año
                    flujoLectura.readLine();//año hora
                    String hora = flujoLectura.readLine();//hora
                    flujoLectura.readLine();//hora porcentaje
                    String porcentaje = flujoLectura.readLine();//porcentaje
                    flujoLectura.readLine();//porc vis
                    String visibilidad = flujoLectura.readLine();//vis
                    flujoLectura.readLine();//ultima
                    Tarea t = new Tarea(id, descripcion, dia, mes, año, hora, porcentaje, visibilidad);
                    tareas.add(t);
                }
                flujoLectura.close();
            } else {
                System.out.println("Archivo No Existe");
            }
        } catch (Exception ex) {
            /*Captura un posible error y le imprime en pantalla*/
            System.out.println(ex.getMessage());
        }
        return tareas;
    }

    public ArrayList leerTareasPublicas() {
        File archivo = new File("C://Tareas_Data.txt");
        ArrayList tareas = new ArrayList();
        try {
            if (archivo.exists()) {
                /*Abre un flujo de lectura a el fichero*/
                BufferedReader flujoLectura = new BufferedReader(new FileReader(archivo));
                String linea;
                /*Lee el archivo linea a linea hasta llegar a la ultima*/
                while ((linea = flujoLectura.readLine()) != null) {
                    /*Imprime la linea leida*/
                    int id = Integer.parseInt(linea);
                    flujoLectura.readLine();//espacio entre id y desc
                    String descripcion = flujoLectura.readLine();//desc
                    flujoLectura.readLine();// desc dia
                    String dia = flujoLectura.readLine();//dia
                    flujoLectura.readLine();//dia mes
                    String mes = flujoLectura.readLine();//mes
                    flujoLectura.readLine();//mes año
                    String año = flujoLectura.readLine();//año
                    flujoLectura.readLine();//año hora
                    String hora = flujoLectura.readLine();//hora
                    flujoLectura.readLine();//hora porcentaje
                    String porcentaje = flujoLectura.readLine();//porcentaje
                    flujoLectura.readLine();//porc vis
                    String visibilidad = flujoLectura.readLine();//vis
                    flujoLectura.readLine();//ultima
                    if (visibilidad.equals("pública")) {
                        Tarea t = new Tarea(id, descripcion, dia, mes, año, hora, porcentaje, visibilidad);
                        tareas.add(t);
                    }
                }
                flujoLectura.close();
            } else {
                System.out.println("Archivo No Existe");
            }
        } catch (Exception ex) {
            /*Captura un posible error y le imprime en pantalla*/
            System.out.println(ex.getMessage());
        }
        return tareas;
    }

    public void modificarFichero(String ruta, Tarea tarea) {
        File archivoAntiguo = new File(ruta);
        String idTarea;
        idTarea = "" + tarea.getId();
        File archivoNuevo = new File("/auxiliar.txt");
        try {
            if (!archivoNuevo.exists()) {
                archivoNuevo.createNewFile();
            }
            /*Si existe el fichero inical*/
            if (archivoAntiguo.exists()) {
                /*Abro un flujo de lectura*/
                BufferedReader flujoLectura = new BufferedReader(new FileReader(archivoAntiguo));
                String linea;
                /*Recorro el fichero de texto linea a linea*/
                while ((linea = flujoLectura.readLine()) != null) {
                    /*Si la linea obtenida es igual al la buscada 
                     *para modificar*/
                    if (linea.equals(idTarea)) {
                        /*Escribo la nueva linea en vez de la que tenia*/
                        int id = tarea.getId();
                        String descripcion = tarea.getDescripcion();
                        String dia = tarea.getDia();
                        String mes = tarea.getMes();
                        String año = tarea.getAño();
                        String hora = tarea.getHora();
                        String porcentaje = tarea.getPorcentaje();
                        String visibilidad = tarea.getVisibilidad();
                        escribirArchivo("/auxiliar.txt", "" + id);
                        escribirArchivo("/auxiliar.txt", descripcion);
                        escribirArchivo("/auxiliar.txt", dia);
                        escribirArchivo("/auxiliar.txt", mes);
                        escribirArchivo("/auxiliar.txt", año);
                        escribirArchivo("/auxiliar.txt", hora);
                        escribirArchivo("/auxiliar.txt", porcentaje);
                        escribirArchivo("/auxiliar.txt", visibilidad);
                        flujoLectura.readLine();//espacio entre id y desc
                        flujoLectura.readLine();//desc
                        flujoLectura.readLine();// desc dia
                        flujoLectura.readLine();//dia
                        flujoLectura.readLine();//dia mes
                        flujoLectura.readLine();//mes
                        flujoLectura.readLine();//mes año
                        flujoLectura.readLine();//año
                        flujoLectura.readLine();//año hora
                        flujoLectura.readLine();//hora
                        flujoLectura.readLine();//hora porcentaje
                        flujoLectura.readLine();//porcentaje
                        flujoLectura.readLine();//porc vis
                        flujoLectura.readLine();//vis
                        flujoLectura.readLine();//ultima
                    } else {
                        /*Escribo la linea antigua*/
                        if (!linea.equals("")) {
                            escribirArchivo("/auxiliar.txt", linea);
                        }
                    }
                }
                flujoLectura.close();
                borrarRenombrarArchivo(archivoAntiguo, archivoNuevo);
            } else {
                System.out.println("Fichero No Existe");
            }
        } catch (Exception ex) {
            /*Captura un posible error y le imprime en pantalla*/
            System.out.println(ex.getMessage());
        }
    }

    public void borrarRenombrarArchivo(File archivoViejo, File archivoNuevo) {
        try {
            /*Si existe el archivo*/
            if (archivoViejo.exists()) {
                /*Borra el archivo*/
                archivoViejo.delete();
                //System.out.println("Archivo Borrado con Exito");  
                archivoNuevo.renameTo(archivoViejo);
            }
        } catch (Exception ex) {
            /*Captura un posible error y le imprime en pantalla*/
            System.out.println(ex.getMessage());
        }
    }

    public void eliminarTarea(String ruta, String idTareaEliminar) {
        File archivoAntiguo = new File(ruta);
        File archivoNuevo = new File("/auxiliar.txt");
        try {
            if (!archivoNuevo.exists()) {
                archivoNuevo.createNewFile();
            }
            if (archivoAntiguo.exists()) {
                /*Abro un flujo de lectura*/
                BufferedReader flujoLectura = new BufferedReader(new FileReader(archivoAntiguo));
                String linea;
                /*Recorro el archivo de texto linea a linea*/
                while ((linea = flujoLectura.readLine()) != null) {
                    if (linea.equals(idTareaEliminar)) {
                        flujoLectura.readLine();//espacio entre id y desc
                        flujoLectura.readLine();//desc
                        flujoLectura.readLine();// desc dia
                        flujoLectura.readLine();//dia
                        flujoLectura.readLine();//dia mes
                        flujoLectura.readLine();//mes
                        flujoLectura.readLine();//mes año
                        flujoLectura.readLine();//año
                        flujoLectura.readLine();//año hora
                        flujoLectura.readLine();//hora
                        flujoLectura.readLine();//hora porcentaje
                        flujoLectura.readLine();//porcentaje
                        flujoLectura.readLine();//porc vis
                        flujoLectura.readLine();//vis
                        flujoLectura.readLine();//ultima
                    } else {
                        /*Escribo la linea antigua*/
                        if (!linea.equals("")) {
                            escribirArchivo("/auxiliar.txt", linea);
                        }
                    }
                }
                flujoLectura.close();
                borrarRenombrarArchivo(archivoAntiguo, archivoNuevo);
            } else {
                System.out.println("Archivo No Existe");
            }
        } catch (Exception ex) {
            /*Captura un posible error y le imprime en pantalla*/
            System.out.println(ex.getMessage());
        }
    }
}
